package map;

import java.util.*;

/**
 * Map的遍历
 * Map提供了三种遍历方式
 * 1∶遍历所有的key
 * 2∶遍历每一组键值对
 * 3∶遍历所有的value(不常用)
 */
public class MapDemo2 {
    public static void main(String[] args) {
        Map<String ,Integer> map = new HashMap<>();
        map.put("语文",99);
        map.put("数学",98);
        map.put("英语",97);
        map.put("物理",96);
        map.put("化学",98);
        System.out.println(map);
        /*
            遍历所有的key
            Set KeySet()
            将当前Map中所有的Key以一个Set集合形式返回。遍历该集合就等同于
            遍历了所有Key
         */
        Set<String > keySet = map.keySet();
        for (String key:keySet){
            System.out.println("key:"+key);
        }
        /*
            遍历每一组键值对
            set<Entry> entrySet()

            将当前Map中每一组键值对以一个Entry实例形式存入Set集合后返回。
            java.util.Map .Entry
            Entry的每一个实例用于表示Map中的一组键值对，其中有两个常用方法:
            getkey()和getValue()
         */
        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
        for (Map.Entry<String,Integer> e : entrySet){
            String key = e.getKey();
            Integer value = e.getValue();
            System.out.println(key+":"+value);
        }


        map.forEach(
                (k,v)-> System.out.println(k+":"+v)
        );
        /*
            遍历所有的value
            Collection values()
            将当前Map中所有的value以一个集合形式返回
         */
        Collection<Integer> values = map.values();
        /*
            集合在使用foreach遍历时并不要求过程中不能通过集合的方法增删元素。
            而之前的迭代器则有此要求，否则可能在遍历过程中抛出异常。
         */
        values.forEach(
                i -> System.out.println("value:"+i)
        );

    }
}
